{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "comet_ml is installed but `COMET_API_KEY` is not set.\n",
      "/usr/local/google/home/julesgm/anaconda3/lib/python3.8/site-packages/torch/cuda/__init__.py:52: UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at  /pytorch/c10/cuda/CUDAFunctions.cpp:100.)\n",
      "  return torch._C._cuda_getDeviceCount() > 0\n"
     ]
    }
   ],
   "source": [
    "# Copyright 2020 Google LLC\n",
    "#\n",
    "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "# you may not use this file except in compliance with the License.\n",
    "# You may obtain a copy of the License at\n",
    "#\n",
    "#      http://www.apache.org/licenses/LICENSE-2.0\n",
    "#\n",
    "# Unless required by applicable law or agreed to in writing, software\n",
    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "# See the License for the specific language governing permissions and\n",
    "# limitations under the License.\n",
    "\n",
    "import collections\n",
    "import functools\n",
    "import itertools\n",
    "import os\n",
    "import pathlib\n",
    "import re\n",
    "import textwrap\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import datasets\n",
    "import shutil\n",
    "import tensorflow as tf\n",
    "import transformers\n",
    "import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Reusing dataset kilt_tasks (/usr/local/google/home/julesgm/.cache/huggingface/datasets/kilt_tasks/all_tasks/1.0.0/821c4295a2c35db2847585918d9c47d7f028f1a26b78825d8e77cd3aeb2621a1)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dataset split keys: ['train', 'validation', 'test']\n"
     ]
    }
   ],
   "source": [
    "# Prepare different HuggingFace objects that will definitely be needed.\n",
    "\n",
    "kilt = datasets.load_dataset(\"kilt_tasks\")\n",
    "eli5 = {k.split(\"_\")[0]: v for k, v in kilt.items() if \"eli5\" in k}\n",
    "tokenizer = transformers.GPT2TokenizerFast.from_pretrained(\"gpt2-xl\")\n",
    "print(f\"Dataset split keys: {list(eli5.keys())}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Extract the lengths of combined question and answer text, once tokenized with the GPT2 tokenizer.\n",
    "\n",
    "def get_len(sample):\n",
    "    question = sample[\"input\"].strip()\n",
    "    answer = min(sample[\"output\"][\"answer\"], key=len).strip()\n",
    "    len_ = len(tokenizer(question + \" \" + answer)[\"input_ids\"])\n",
    "\n",
    "    return {\"len_\":len_}\n",
    "mapped = eli5[\"train\"].map(get_len, num_proc=os.cpu_count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Count the number of entries of each length, then sort by length\n",
    "\n",
    "counts = collections.Counter(mapped[\"len_\"])\n",
    "sorted_counts = sorted(counts.items(), key=lambda x: x[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "97.5%: 398 bpe tokens or fewer\n",
      "(1024 - 398) / 1 = 626\n",
      "(1024 - 398) / 2 = 313\n",
      "(1024 - 398) / 3 = 209\n",
      "(1024 - 398) / 4 = 156\n",
      "95.0%: 295 bpe tokens or fewer\n",
      "(1024 - 295) / 1 = 729\n",
      "(1024 - 295) / 2 = 364\n",
      "(1024 - 295) / 3 = 243\n",
      "(1024 - 295) / 4 = 182\n",
      "92.5%: 244 bpe tokens or fewer\n",
      "(1024 - 244) / 1 = 780\n",
      "(1024 - 244) / 2 = 390\n",
      "(1024 - 244) / 3 = 260\n",
      "(1024 - 244) / 4 = 195\n",
      "90.0%: 211 bpe tokens or fewer\n",
      "(1024 - 211) / 1 = 813\n",
      "(1024 - 211) / 2 = 406\n",
      "(1024 - 211) / 3 = 271\n",
      "(1024 - 211) / 4 = 203\n",
      "87.5%: 187 bpe tokens or fewer\n",
      "(1024 - 187) / 1 = 837\n",
      "(1024 - 187) / 2 = 418\n",
      "(1024 - 187) / 3 = 279\n",
      "(1024 - 187) / 4 = 209\n",
      "85.0%: 169 bpe tokens or fewer\n",
      "(1024 - 169) / 1 = 855\n",
      "(1024 - 169) / 2 = 428\n",
      "(1024 - 169) / 3 = 285\n",
      "(1024 - 169) / 4 = 214\n",
      "82.5%: 154 bpe tokens or fewer\n",
      "(1024 - 154) / 1 = 870\n",
      "(1024 - 154) / 2 = 435\n",
      "(1024 - 154) / 3 = 290\n",
      "(1024 - 154) / 4 = 218\n",
      "80.0%: 142 bpe tokens or fewer\n",
      "(1024 - 142) / 1 = 882\n",
      "(1024 - 142) / 2 = 441\n",
      "(1024 - 142) / 3 = 294\n",
      "(1024 - 142) / 4 = 220\n",
      "77.5%: 132 bpe tokens or fewer\n",
      "(1024 - 132) / 1 = 892\n",
      "(1024 - 132) / 2 = 446\n",
      "(1024 - 132) / 3 = 297\n",
      "(1024 - 132) / 4 = 223\n",
      "75.0%: 123 bpe tokens or fewer\n",
      "(1024 - 123) / 1 = 901\n",
      "(1024 - 123) / 2 = 450\n",
      "(1024 - 123) / 3 = 300\n",
      "(1024 - 123) / 4 = 225\n",
      "70.0%: 109 bpe tokens or fewer\n",
      "(1024 - 109) / 1 = 915\n",
      "(1024 - 109) / 2 = 458\n",
      "(1024 - 109) / 3 = 305\n",
      "(1024 - 109) / 4 = 229\n",
      "65.0%: 98 bpe tokens or fewer\n",
      "(1024 - 98) / 1 = 926\n",
      "(1024 - 98) / 2 = 463\n",
      "(1024 - 98) / 3 = 309\n",
      "(1024 - 98) / 4 = 232\n",
      "60.0%: 89 bpe tokens or fewer\n",
      "(1024 - 89) / 1 = 935\n",
      "(1024 - 89) / 2 = 468\n",
      "(1024 - 89) / 3 = 312\n",
      "(1024 - 89) / 4 = 234\n",
      "55.0%: 81 bpe tokens or fewer\n",
      "(1024 - 81) / 1 = 943\n",
      "(1024 - 81) / 2 = 472\n",
      "(1024 - 81) / 3 = 314\n",
      "(1024 - 81) / 4 = 236\n"
     ]
    }
   ],
   "source": [
    "# Compute the ratio of samples that are in a certain percentile of lengths, and compute how long retrievals\n",
    "# would have to be for a certain fraction of the dataset to have access to that amount of retrievals\n",
    "\n",
    "context_length = 1024\n",
    "max_num_retrievals = 4\n",
    "fractions = [.55, .6, .65, .7, .75, .775, .8, .825, .85, .875, .9, .925, .95, .975][::-1]\n",
    "\n",
    "points = {}\n",
    "max_pairs = {}\n",
    "for top_fraction in fractions:\n",
    "    qty_accumulator = 0\n",
    "    cumulative = [\n",
    "        (count, qty_accumulator := qty / len(eli5[\"train\"]) + qty_accumulator) \n",
    "        for count, qty in sorted_counts if qty_accumulator < top_fraction\n",
    "    ]\n",
    "    x = [x[0] for x in cumulative]\n",
    "    y = [x[1] for x in cumulative]\n",
    "    points[top_fraction] = (x, y)\n",
    "    max_pair = max(cumulative, key=lambda pair: pair[1])\n",
    "    max_pairs[top_fraction] = max_pair[0]\n",
    "    print(f\"{top_fraction:0.1%}: {max_pair[0]} bpe tokens or fewer\")\n",
    "    for i in range(1, max_num_retrievals + 1):\n",
    "        print(f\"({context_length} - {max_pair[0]}) / {i} = {(context_length - max_pair[0]) / i:0.0f}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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QM2/G0VFRdxxxx3069eP3r17M3fu3IYN2NFqeFd/6dOFjV9qaqrt1q2bzcvLs9Zae/PNN9t//OMfdseOHXbnzp121KhRNj4+/px9Y2Nj7Zo1a6y11v7973+3TzzxhLXW2m3bttk+ffrY3NxcW1RUZMeMGWN3795tx40bZ5cvX26ttXbZsmV21KhRVWL64osv7MaNG22fPn0q2ubMmWPnzp1rrbV27ty59te//rW11tq//e1v9mc/+5m11tqjR4/amJgYW1JScs65Vq5caYuKiqy11v7617+umGvlypX2u+++s3369LFpaWk2ODjYnjhxomLcSy+9ZGfOnGmttXbTpk320KFD1lpr//GPf9jg4OAq72GttQcPHrTjx4+3YWFhNj09/axx27Zts0FBQWfF97vf/c4+//zzNf6Z3XDDDfamm25y2MfR9X722Wd2zJgxtqCgoOLn5MzPzpm5a/uztNbarVu32u7du9c4rzPS0tLsxo0brbXWnjx50vbq1ctu377d4e+ptdaeOnXKrlu3zr766qv2vvvuu6j3rst4rXX8e3HGuf5sm6Kafg41/T8jOTn5rP+OpHkqLS21OTk51lprCwsL7ZAhQ+w333xT4+/GokWL7OTJk6211ubm5trw8HCbnJxc53FRw6cLdSdLLlhxcTH5+fkUFxeTl5dHly5d6N27N5dccolTfXft2sXIkSMBGDduHO+99x4A33//PcOGDcPHxwcPDw9GjRrFkiVLMMZU/OskOzubLl26VHmPkSNH0q5duyptH374IXfccQcAd9xxBx988AEAO3bsYMyYMQB06NCBwMDAKnc0HM01fvx4PDzK9u8dNmwYqampFe0dOnQAyv6VZYyhTZs2FeNyc3Mxpqz4wcCBAyvivuOOOygqKqK0tLTK+/zqV7/iT3/6U8WY6uP69OlDaWkpvr6+Z/2ca/LBBx8QERFBnz59HJ53dL2vvvoqjzzyCF5eXgAV11jbz86ZuWv7swT497//zdSpU528Qsc6d+5MTEwMAP7+/vTu3ZtDhw7V+Hvq6+vL5Zdfjre390W974WqKV5w/HsBtf/ZNkU1/Rxq+n+GtBzGGPz8/ICyu1RFRUUYY2r83TDGkJubW/F3kKenZ5X/P9c3JVlyQbp27cpDDz1EWFgYnTt3JiAggPHjx59X3759+7J0adnetP/9739JSUkBoG/f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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Graph the results.\n",
    "\n",
    "plt.figure(figsize=(10, 10));\n",
    "ax = plt.gca()\n",
    "ax.margins(tight=True)\n",
    "ax.plot(*points[max(fractions)]);\n",
    "plt.yticks(np.linspace(0, 1, 21))\n",
    "percentages = max_pairs.keys()\n",
    "lengths = max_pairs.values()\n",
    "\n",
    "for x, y in zip(lengths, percentages):\n",
    "    ax.plot((x, x), (0, y), color=\"red\")\n",
    "\n",
    "ax.scatter(lengths, \n",
    "           percentages, color=\"red\");\n",
    "ax.scatter(lengths, \n",
    "           [0 for _ in lengths], color=\"red\");\n",
    "\n",
    "for y, x in max_pairs.items():\n",
    "    ax.text(x - 25, y + 0.025, f\"{y:0.1%}\", size=13)\n",
    "    ax.text(x - 10, -0.032, f\"{x}\", size=10)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}